/* 
 * Die Klasse stellt eine Fassade dar, auf die andere Klassen, die sich 
 * ausserhalb des Packages befinden, zugreifen koennen.
 * 
 * Datei: FassadeBibVis.java  Autor:  Christian Plappert
 * Datum: 27.11.2011          Version: 0.2
 * 
 * Historie: 
 * 
 * 27.11.2011: v0.2    gibRegale()-Methode implementiert.
 * 16.11.2011: v0.1.1  Klassenname abgeaendert.
 * 09.11.2011: v0.1    Klasse wurde angelegt.
 * 
 */
package bibvis;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class FassadeBibVis
{
  private Editor ed;
  /* Kopie der Datenbank vom Editor - kein neues Objekt - */
  private Datenbank db;
  private Markierer markierer;
  private Frontansicht front;
  private Anzeige anzeige;
  private String sprache;
  protected static boolean gesperrt = false;


  /**
   * Gibt ein zweigeteiltes Panel zurueck. Waehrend auf der einen
   * Haelfte die Bibliothek aus der Vogelperspektive zu sehen ist,
   * inklusive dem markierten Regal, zeigt die andere Haelfte das Regal
   * in der Frontansicht.
   * 
   * @param standort
   * @param regalID
   * @param etage
   * @param abschnitt
   * @return
   */
  public JFrame zeigeStandort (String standort, int regalID, int etage,
      int abschnitt)
  {
    try
    {
      if (db == null)
      {
        db = new Datenbank ();
      }

      markierer = new Markierer (db.gibRechtecke (standort),
          db.gibObjekte (standort), db.gibFigur (standort, regalID),
          db.gibStandortDaten (standort), db.gibMassstab (standort));

      front = new Frontansicht (db.gibRegal (regalID, standort), etage,
          abschnitt);
      anzeige = new Anzeige (markierer, front, db.gibRegal (regalID,
          standort), etage, abschnitt);

      return anzeige;
    }
    catch (NullPointerException npex)
    {
      // TODO Exception wird angezeigt aber trotzdem in Konsole.
      JOptionPane.showMessageDialog (null, "Regal nicht gefunden.");
      return null;
    }
  }


  public Editor legeBibVisAn (String sprache)
  {
    if (!gesperrt)
    {
      gesperrt = true;
      ed = new Editor (sprache);
      ed.start ();
      db = ed.gibDatenbank ();
      return ed;
    }
    else
    {
      JOptionPane.showMessageDialog (null,
          "Es laeuft bereits eine Instanz des Programms.");
      return null;
    }

  }


  public void schliesseBibVis ()
  {
    ed.schliessen ();
  }


  public boolean pruefeExistenz ()
  {
    try
    {
      return ! (db.gibStandortListe ().isEmpty ());
    }
    catch (NullPointerException npex)
    {
      JOptionPane.showMessageDialog (null,
          "Noch keine Bibliothek vorhanden.");
      return false;
    }
  }


  protected Datenbank gibDB ()
  {
    return db;
  }


  public String gibSprache ()
  {
    return sprache;
  }


  public void setzeSprache (String sprache)
  {
    this.sprache = sprache;
  }
}
